package com.px.framework.interceptor;

import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;


/**
 * @author
 * @desc 接口响应体处理器
 * @since
 */
@RestControllerAdvice
public class ResponseHandler implements ResponseBodyAdvice<Object> {
//
//    @Value("${lydedp.controllerPackages}")
//    private String[] controllerPackages;

    @Override
    public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
        return true;
//        if (controllerPackages.length > 0) {
//            for (String controllerPackage : controllerPackages) {
//                if (returnType.getDeclaringClass().getPackage().getName().startsWith(controllerPackage)) {
//                    return true;
//                }
//            }
//        }
//        return returnType.getDeclaringClass().getPackage().getName().startsWith("com.lydedp");

    }

    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
                                  Class<? extends HttpMessageConverter<?>> selectedConverterType,
                                  ServerHttpRequest request, ServerHttpResponse response) {


//        if (body instanceof AjaxResult) {
//            AjaxResult result = (AjaxResult) body;
//            if (StringUtils.equals("200" , result.get(AjaxResult.CODE_TAG) + "")) {
//                Object data = result.get(AjaxResult.DATA_TAG);
//                result.put(AjaxResult.DATA_TAG, "-----" + data);
//                return result;
//            }
//        }
//        if (body instanceof TableDataInfo) {
//            TableDataInfo result = (TableDataInfo) body;
//            if (200 == result.getCode()) {
//
//                result.setRows(result.getRows().stream().map(row -> {
//                    return Base64.encode(JSON.toJSONString(row).getBytes(StandardCharsets.UTF_8));
//                }).collect(Collectors.toList()));
//
//                return JSON.toJSONString(result);
//            }
//        }

        return body;
    }
}
